package br.jus.cnj.report;

import java.util.List;
import java.util.Map;

import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;

import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class GerarRelatorioUtilJSF {

	private JasperPrint jasperPrint;

	public void gerarRelatorio(List<?> listaDados, String nomeRelatorio, String diretorioRelatorio, String arquivoRelatorio, TipoRelatorio tipoRelatorio) {
		try {
			initRelatorio(listaDados, null, nomeRelatorio, diretorioRelatorio, arquivoRelatorio, tipoRelatorio);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void gerarRelatorio(List<?> listaDados, Map parametros, String nomeRelatorio, String diretorioRelatorio, String arquivoRelatorio, TipoRelatorio tipoRelatorio) {
		try {
			initRelatorio(listaDados, parametros, nomeRelatorio, diretorioRelatorio, arquivoRelatorio, tipoRelatorio);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void initRelatorio(List<?> listaDados, Map parametros, String nomeRelatorio, String diretorioRelatorio, String arquivoRelatorio, TipoRelatorio tipoRelatorio) throws Exception {
		JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(listaDados);
		ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
		String path = servletContext.getRealPath("/");
		jasperPrint = JasperFillManager.fillReport(path + "//" + diretorioRelatorio + "//" + arquivoRelatorio + ".jasper", parametros, beanCollectionDataSource);
		
		GerarRelatorio gerarRelatorio = tipoRelatorio.getGerarRelatorio();
		gerarRelatorio.gerarRelatorio(jasperPrint, nomeRelatorio);
	}

	// private void responseRelatorio(String nomeRelatorio) throws IOException, JRException {
	// HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
	// httpServletResponse.addHeader("Content-disposition", "attachment; filename=" + nomeRelatorio + ".pdf");
	// ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
	// JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);
	// FacesContext.getCurrentInstance().responseComplete();
	// }

}
